home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / SecalDemo / Projects / Examples / x_ChunkyDemo.scl < prev    next >
Text File  |  1998-06-24  |  3KB  |  130 lines

  1. /******************************************************************************\
  2. **  Chunky demo (uses Extension) for Secal                                    **
  3. **  Requires Kickstart 2                                                      **
  4. \******************************************************************************/
  5.  
  6.  
  7. go main;
  8.  
  9.  
  10. def WIDTH=96;                                # MULTIPLE OF 16
  11. def HEIGHT=48;
  12. def DEPTH=6;
  13.  
  14.  
  15. include "inc/graphics/modeid.inc";
  16.  
  17. include "ext/ext.inc";                # INTERFACE FOR EXTENSION
  18. inclib "ext/ext.lib";                    # USE EXTENSION LIB
  19.  
  20.  
  21. #-------------------------------------------------------------------------------
  22.  
  23.  
  24. main:
  25. push d2\a2\a3;
  26.  
  27. x_Init;                                                # INITIALIZE EXTENSION
  28. if d0 then
  29.     x_GraphicsStart;                        # START GRAPHICS SUBSYSTEM
  30.     if d0 then
  31.         x_Scr_Open(EXTRAHALFBRITE_KEY,WIDTH<<1,HEIGHT<<1,DEPTH,0,@scrcolors,0);
  32.         a2:=a0;                                        # OPEN SCREEN (EHB)
  33.  
  34.         if a2 then
  35.             x_Scr_AddBmp(a2);            # ADD BUFFER FOR DOUBLE BUFFERING
  36.             if d0 then
  37.                 x_SetTaskPri(0,31);        # RAISE TASK PRIORITY
  38.  
  39.                 d2:=0;
  40.                 repeat
  41.                     call frame;                # RENDER NEXT FRAME
  42.  
  43.                     d2:=d2 xor 1;
  44.                     x_Scr_GetBmp(a2,d2); a3:=a0;    # A3=CURRENTLY INVISIBLE BITMAP
  45.  
  46.                     x_C2P_6xy(@chunkybuf,x_bmp(a3).planes,WIDTH,HEIGHT,
  47.                                         x_bmp(a3).rowwidth,x_bmp(a3).rowdiff);
  48.                                         # CONVERT CHUNKY BUFFER INTO THE PLANAR BITMAP
  49.  
  50.                     x_Scr_ActivateBmp(a2,d2,-1,-1);    # SWAP DISPLAY BITMAPS
  51.                 until [$dff016] and $400=0;    # DIRTY CHECK FOR RIGHT MOUSE BUTTON
  52.  
  53.                 x_RevertTaskPri;        # REVERT TO PREVIOUS PRIORITY
  54.             ;
  55.         ;
  56.     ;
  57.     x_Done;                                        # CLOSE EXTENSION AND CLEANUP
  58. ;
  59.  
  60. d0.l:=0;
  61.  
  62. pop d2\a2\a3;
  63. rts;                                                            # MAIN
  64.  
  65.  
  66.  
  67. scrcolors:
  68. dc.l $000000,$130611,$250c22,$381233,$4a1744,$5d1d55,$6f2366,$81295b;
  69. dc.l $942f51,$a63546,$b93a3b,$cb4030,$de4626,$f04c1b,$f15a26,$f36830;
  70. dc.l $f4763a,$f68445,$f7914f,$f99f5a,$faad64,$fcbb6e,$fdc979,$ffd783;
  71. dc.l $ffdc93,$ffe1a2,$ffe6b2,$ffebc1,$fff0d1,$fff5e0,$fffaf0,$ffffff;
  72.                                             # SCREEN COLORS, RGB8 FORMAT
  73.  
  74.  
  75. #-------------------------------------------------------------------------------
  76.  
  77.  
  78. # THIS FUNCTION CALCULATES ONE FRAME OF THE "FIRE". FIRST THE TWO EXTRA
  79. # LINES AT THE BOTTOM ARE FILLED WITH RANDOM COLORS. THEN THE NEW COLOR OF
  80. # EACH PIXEL IS CALCULATED FROM THE COLORS OF 4-5 NEIGHBOURING PIXELS BELOW.
  81.  
  82.  
  83. frame:
  84. push d2\d3\d4\d5\a2\a3\a4\a5\a6;
  85.  
  86. a2:=@chunkybuf+HEIGHT*WIDTH;
  87. for d2:=WIDTH-1 downto 0 do
  88.     x_Rnd; [a2+]:=d0 and $1f1f+$0202;
  89. ;
  90.  
  91. a2:=@chunkybuf; d2.l:=0; a3:=0; a4:=[a2+WIDTH];
  92. d3.l:=$3f3f3f3f; d4.l:=$01010101; a5:=$80808080; a6:=$02020202; a1:=$40404040;
  93. d5.l:=(HEIGHT*WIDTH)>>2;
  94.  
  95. loop:
  96.     move.l a3,d2;  move.l a4,a3;  move.l [a2+WIDTH+4],a4;
  97.     move.l a3,d1;  add.l [a2+WIDTH*2],d1;
  98.     move.l a3,d0;  move.b d2,d0;  ror.l 8,d0;  add.l d0,d1;
  99.     move.l a3,d0;  lsl.l 8,d0;
  100.     move.l a4,d7;  rol.l 8,d7;  move.b d7,d0;  add.l d0,d1;
  101.     move.l a3,d0;  lsr.l 1,d0;  and.l d3,d0;  add.l d0,d1;
  102.     lsr.l 2,d1;  and.l d3,d1;
  103.  
  104.     add.l a5,d1;  sub.l a6,d1;
  105.     move.l a1,d0;  and.l d1,d0;  lsr.l 5,d0;  add.l d0,d1;
  106.     move.l d1,d0;  lsr.l 5,d0;  and.l d4,d0;  sub.l d0,d1;
  107.     and.l d3,d1;  move.l d1,[a2+];
  108.  
  109.     subq.l 1,d5;
  110.     bne.b loop;
  111.  
  112. pop d2\d3\d4\d5\a2\a3\a4\a5\a6;
  113. rts;                                                            # FRAME
  114.  
  115.  
  116. #-------------------------------------------------------------------------------
  117.  
  118.  
  119. bss;
  120.  
  121. align 4;
  122. chunkybuf: ds.b (HEIGHT+2)*WIDTH;
  123.                                                 # LONG ALIGNED CHUNKY BUFFER IN THE BSS SECTION,
  124.                         # ONE BYTE FOR EACH PIXEL
  125. code;
  126.  
  127.  
  128. #-------------------------------------------------------------------------------
  129.  
  130.